// 定义一个函数 buildTree，用于将扁平化的数据结构转换为树形结构。
export function buildTree(flatData: any[]): any[] {
  // 创建一个映射对象 map，用于存储每个节点及其子节点。
    const map: { [key: number]: any } = {};
    // 创建一个数组 roots，用于存储没有父节点的根节点。
    const roots: any[] = [];
  
    // 将所有节点放入map中
    // 遍历 flatData 数组中的每个节点，并将其添加到 map 中。
    // 每个节点都包含其原始属性以及一个新的空数组 children，用于存储子节点。
    flatData.forEach(node => {
      map[node.id] = { ...node, children: [] };
    });
  
    // 构建树
    // 再次遍历 flatData 数组中的每个节点，构建树形结构。
    flatData.forEach(node => {
      // 如果节点有父节点（即 pid 存在且对应的父节点存在于 map 中），
        // 则将当前节点添加到父节点的 children 数组中。
      if (node.pid !== undefined && map[node.pid]) {
        map[node.pid].children.push(map[node.id]);
      } else {
        // 如果节点没有父节点，则将其添加到 roots 数组中。
        roots.push(map[node.id]);
      }
    });
    // 返回 roots 数组，其中包含了完整的树形结构。
    return roots;
  }